[UE4]在C++中实现控制台指令

您所在的位置:网站首页 ue4 cmd命令 [UE4]在C++中实现控制台指令

[UE4]在C++中实现控制台指令

2024-03-29 15:56| 来源: 网络整理| 查看: 265

自定义控制台变量:

https://docs.unrealengine.com/4.27/zh-CN/ProductionPipelines/DevelopmentSetup/Tools/ConsoleManager/

”Stat“类的

如"Stat fps"

1. GEngine->Exec(GetWorld(), TEXT("stat fps"));

2. TArray EnabledStats;     EnabledStats.Add("fps");     World->GetGameViewport()->SetEnabledStats(EnabledStats);

"Show"类的

如"show shadercomplexity"

FOutputDevice& Out = *GLog;             UWorld* World = GetWorld();             World->GetGameViewport()->HandleViewModeCommand(TEXT("SHADERCOMPLEXITY"), Out, World);

1. 引擎单例派生类可直接调用方法

以下类的派生类中可以通过在方法上标记 UFUNCTION(Exec) 直接调用方法  Pawns, Player Controllers, Player Input, Cheat Managers, Game Modes, Game Instances, overriden Game Engine classes, and Huds should all work by just adding the standard UFUNCTION markup

我只在Game Mode的派生类中实测过,如下

声明控制台可执行标记 UFUNCTION(Exec)

UFUNCTION(Exec)     virtual void solname(FString _str, int32 _num);

void AMyGameMode::solname(FString _str, int32 _num) {     FString str = FString::Printf(TEXT("--- %s - %d"), *_str, _num);     UE_LOG(LogMyTest, Warning, TEXT("--- %s - %d"), *_str, _num); } 按到 ` 键,输入指令 solname asd 123 

结果 

2. 自定义类调用方法

自定义类  

MyActor.h

#pragma once

#include "MyActor.generated.h"

UCLASS() class MYTEST_API AMyActor : public AActor {     GENERATED_BODY() public:     AMyActor();     virtual ~AMyActor();

    void SetInfo(FString name);

    UFUNCTION(Exec)     void Say();

private:     FString mName; };1234567891011121314151617181920212223 MyActor.cpp

#include "MyTest.h"

#include "MyActor.h"

AMyActor::AMyActor() { }

AMyActor::~AMyActor() {

}

void AMyActor::SetInfo(FString name) {     mName = name; }

void AMyActor::Say() {     UE_LOG(LogMyTest, Warning, TEXT("name:%s, Say hello"), *mName); } 如果不加点手段,在控制台输入 Say 是不会掉用对应的方法,所以在派生自 UGameInstance (只要是 引擎单例派生类 都可)中扩展类中,重写 ProcessConsoleExec 方法,(下面 生成实例的方法就不贴了)

bool UMyGameInstance::ProcessConsoleExec(const TCHAR* Cmd, FOutputDevice& Ar, UObject* Executor) {     bool ret = Super::ProcessConsoleExec(Cmd, Ar, Executor);     if (!ret)     {         for (AMyActor* actor : mActorVec)             ret = actor->ProcessConsoleExec(Cmd, Ar, Executor);     }     UE_LOG(LogMyTest, Warning, TEXT("--- Cmd:%s exec:%d"), Cmd, (int32)ret);     return ret; }

3

如何构建自己的控制台指令呢? 我们将要使用到UFUNCTION宏中的指令Exec,这条指令可以帮助我们在控制台构建指令函数,指令名即为函数名称。格式如下: UFUNCTION(Exec) void TestCmd(参数表) 使用时,只需要在运行阶段,使用按键~,打开控制台,然后搜寻TestCmd指令,输入对应参数,即可调用TestCmd函数,非常的简单! 注意,并不是所有的类都支持加入Exec指令,只有Possessed Pawns(拥有操控权pawn), Player Controllers,Player Input, Cheat Managers, Game Modes, Game Instances, 引擎重写类, HUD。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3